import java.util.HashMap;
import java.util.Iterator;
import java.util.Observable;
import java.util.Set;

import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.JSeparator;

public class VueSaisieParution extends Vue {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JButton buttonValider;
	private JButton buttonEnregistrer;
	private JButton buttonEnregistrer1;
	private JButton buttonQuitter;
	private JTextField textFieldIssn;
	private JTextField textFieldIdentifiant;
	private JTextField textFieldPeriodique;
	private JTextField textFieldTitre;
	private JComboBox comboBoxAuteur;
	
	private Periodique pe;
	private Parution pa;
	
	/**
	 * Create the frame.
	 */
	public VueSaisieParution(Controleur controleur) {
		super(controleur);
		setTitle("Enregistrement d'une nouvelle Parution");
		//setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		
		contentPane = new JPanel();
		setBounds(100, 100, 350, 400);
		
		this.addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);
			}
		});
		
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblIssn = new JLabel("Issn : ");
		lblIssn.setBounds(96, 14, 30, 14);
		contentPane.add(lblIssn);
		
		textFieldIssn = new JTextField();
		textFieldIssn.setBounds(159, 12, 120, 20);
		contentPane.add(textFieldIssn);
		textFieldIssn.setColumns(10);
		
		buttonValider = new JButton("Valider");
		buttonValider.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			String issn=textFieldIssn.getText();
			pe=getControleur().rechPerio(issn);
			if(pe==null){
				Message dialogue = new Message("Le periodique n'existe pas");
			}
			else{
				alimente(pe);
				setEtat(inter1);
				
			}
		}
			
		});	
		buttonValider.setBounds(182, 42, 97, 23);
		contentPane.add(buttonValider);
		
		JLabel lblIndentificationDeLa = new JLabel("Indentifiant :");
		lblIndentificationDeLa.setBounds(63, 110, 63, 14);
		contentPane.add(lblIndentificationDeLa);
		
		textFieldIdentifiant = new JTextField();
		textFieldIdentifiant.setBounds(159, 108, 120, 20);
		contentPane.add(textFieldIdentifiant);
		textFieldIdentifiant.setColumns(10);
		
		buttonEnregistrer = new JButton("enregistrer");
		buttonEnregistrer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				pa=getControleur().enregistrerParution(textFieldIdentifiant.getText(),pe);
				}
		});	
		buttonEnregistrer.setBounds(182, 140, 97, 23);
		contentPane.add(buttonEnregistrer);
		
		JLabel lblPeriodique = new JLabel("Periodique :");
		lblPeriodique.setBounds(69, 79, 57, 14);
		contentPane.add(lblPeriodique);
		
		textFieldPeriodique = new JTextField();
		textFieldPeriodique.setBounds(159, 76, 120, 20);
		contentPane.add(textFieldPeriodique);
		textFieldPeriodique.setColumns(10);
		
		JLabel lblTitreDeLarticle = new JLabel("Titre de l'article :");
		lblTitreDeLarticle.setBounds(48, 190, 78, 14);
		contentPane.add(lblTitreDeLarticle);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(159, 188, 120, 20);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		comboBoxAuteur = new JComboBox();
		comboBoxAuteur.setBounds(159, 220, 120, 20);
		contentPane.add(comboBoxAuteur);
		
		JLabel lblAuteur = new JLabel("Auteur :");
		lblAuteur.setBounds(86, 215, 40, 14);
		contentPane.add(lblAuteur);
		
		buttonEnregistrer1 = new JButton("enregistrer");
		buttonEnregistrer1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().enregistrerArticle(textFieldTitre.getText(),(String)comboBoxAuteur.getSelectedItem(), pa);
				}
		});	
		buttonEnregistrer1.setBounds(182, 252, 97, 23);
		contentPane.add(buttonEnregistrer1);
		
		buttonQuitter = new JButton("Quitter");
		buttonQuitter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueSaisieParution.this);}
		});		
		buttonQuitter.setBounds(136, 326, 89, 23);
		contentPane.add(buttonQuitter);
		
	}
	
	public void alimente(Periodique pe){
		textFieldPeriodique.setText(pe.getNomPeriodique());
	}
	
	public void alimenteAuteurs(HashMap<String, Auteur> auteurs) {
		comboBoxAuteur.removeAllItems();
		comboBoxAuteur.addItem("");
		if (auteurs!=null){
		Set<String> keys = auteurs.keySet();
		Iterator<String> i = keys.iterator();
		while (i.hasNext()) {
			String el = i.next();
			comboBoxAuteur.addItem(el);
		}

		}


		 
	}
		
		
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {	
			buttonValider.setEnabled(true);
			buttonEnregistrer.setEnabled(false);
			buttonEnregistrer1.setEnabled(false);
			textFieldIssn.setEditable(true);
			textFieldIdentifiant.setEditable(false);
			textFieldPeriodique.setEditable(false);
			textFieldTitre.setEditable(false);
			comboBoxAuteur.setEditable(false);
			break;}
		case inter1: {
			buttonValider.setEnabled(false);
			buttonEnregistrer.setEnabled(true);
			textFieldIssn.setEditable(false);
			textFieldIdentifiant.setEditable(true);
			break;}
		case inter2: {
			buttonEnregistrer.setEnabled(false);
			textFieldIdentifiant.setEditable(false);
			textFieldTitre.setEditable(true);
			comboBoxAuteur.setEditable(true);
			buttonEnregistrer1.setEnabled(true);
			break;}
		
		case inter3: {
			
			textFieldTitre.setText("");
			
			
			break;}
		
		}
		
	}
	
	public void update(Observable observable, Object objet) {
		// maj de la vue lorque l'ouvrage a été modifié
		this.alimenteAuteurs(this.getControleur().getAuteurs());
		super.update(observable,  objet);
	} // Fin upDate	
}
